#!/usr/bin/env python
"""
对比分析：为什么之前的图片能显示，新测试的图片却不能显示
"""
import os
import sys
import django
import requests

# 设置Django环境
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'zzsadmin.settings')
django.setup()

from django.contrib.auth.models import User
from ai_image.models import ImageGeneration
from django.conf import settings

def compare_old_vs_new_images():
    """对比分析旧图片vs新图片的差异"""
    print("🔍 对比分析：旧图片 vs 新图片的差异...")
    print("=" * 60)
    
    try:
        admin = User.objects.get(username='admin')
        
        # 获取能正常显示的旧图片（如ID:35）
        old_images = ImageGeneration.objects.filter(
            user=admin,
            id__lte=35  # 旧图片
        ).order_by('-id')[:3]
        
        # 获取不能显示的新测试图片
        new_images = ImageGeneration.objects.filter(
            user=admin,
            id__in=[48, 49, 50, 51]  # 新测试图片
        ).order_by('id')
        
        print("📊 旧图片分析（能正常显示）:")
        print("-" * 40)
        
        for img in old_images:
            print(f"\n🟢 图片 ID:{img.id}")
            print(f"   📝 提示词: {img.prompt[:30]}...")
            print(f"   🔗 URL: {img.image_url}")
            
            if img.image_url:
                file_path = img.image_url.replace('/media/', '')
                full_path = os.path.join(settings.MEDIA_ROOT, file_path)
                
                if os.path.exists(full_path):
                    file_size = os.path.getsize(full_path)
                    print(f"   📁 文件大小: {file_size} bytes")
                    
                    # 检查文件类型
                    with open(full_path, 'rb') as f:
                        file_header = f.read(20)
                    
                    if file_header.startswith(b'\xff\xd8\xff'):
                        print(f"   🖼️  文件格式: JPEG (真实图片)")
                    elif file_header.startswith(b'\x89PNG'):
                        print(f"   🖼️  文件格式: PNG (真实图片)")
                    elif b'<svg' in file_header or file_header.startswith(b'<?xml'):
                        print(f"   🖼️  文件格式: SVG (矢量图)")
                    else:
                        print(f"   🖼️  文件格式: 其他")
                        print(f"   📄 文件头: {file_header}")
                
                # 测试代理访问
                proxy_url = f"http://127.0.0.1:8000/api/images/proxy/{img.id}/"
                try:
                    response = requests.head(proxy_url, timeout=5)
                    content_type = response.headers.get('content-type', 'unknown')
                    print(f"   📡 代理Content-Type: {content_type}")
                    print(f"   ✅ 状态: 能正常显示")
                except Exception as e:
                    print(f"   ❌ 代理访问失败: {e}")
        
        print(f"\n📊 新图片分析（不能正常显示）:")
        print("-" * 40)
        
        for img in new_images:
            print(f"\n🔴 图片 ID:{img.id}")
            print(f"   📝 提示词: {img.prompt[:30]}...")
            print(f"   🔗 URL: {img.image_url}")
            
            if img.image_url:
                file_path = img.image_url.replace('/media/', '')
                full_path = os.path.join(settings.MEDIA_ROOT, file_path)
                
                if os.path.exists(full_path):
                    file_size = os.path.getsize(full_path)
                    print(f"   📁 文件大小: {file_size} bytes")
                    
                    # 检查文件类型
                    with open(full_path, 'rb') as f:
                        file_header = f.read(20)
                    
                    if file_header.startswith(b'\xff\xd8\xff'):
                        print(f"   🖼️  文件格式: JPEG (真实图片)")
                    elif file_header.startswith(b'\x89PNG'):
                        print(f"   🖼️  文件格式: PNG (真实图片)")
                    elif b'<svg' in file_header or file_header.startswith(b'<?xml'):
                        print(f"   🖼️  文件格式: SVG (矢量图) ⚠️")
                    else:
                        print(f"   🖼️  文件格式: 其他")
                        print(f"   📄 文件头: {file_header}")
                
                # 测试代理访问
                proxy_url = f"http://127.0.0.1:8000/api/images/proxy/{img.id}/"
                try:
                    response = requests.head(proxy_url, timeout=5)
                    content_type = response.headers.get('content-type', 'unknown')
                    print(f"   📡 代理Content-Type: {content_type}")
                    if content_type == 'image/svg+xml':
                        print(f"   ❌ 问题: SVG在<img>标签中显示有问题")
                    else:
                        print(f"   ✅ Content-Type正常")
                except Exception as e:
                    print(f"   ❌ 代理访问失败: {e}")
        
        print(f"\n💡 关键差异分析:")
        print("=" * 60)
        print("🟢 能显示的旧图片特征:")
        print("   1. 文件格式: JPEG/PNG (真实的二进制图片格式)")
        print("   2. 文件大小: 较大 (包含真实图片数据)")
        print("   3. Content-Type: image/jpeg 或 image/png")
        print("   4. 浏览器兼容性: 完美支持")
        
        print(f"\n🔴 不能显示的新图片问题:")
        print("   1. 文件格式: SVG (XML文本格式)")
        print("   2. 文件大小: 较小 (只是文本描述)")
        print("   3. Content-Type: image/svg+xml")
        print("   4. 浏览器兼容性: 在<img>标签中可能不显示")
        
        print(f"\n🔧 解决方案:")
        print("需要将SVG文件转换为真正的JPEG/PNG格式")
        print("或者从能正常显示的图片中复制一份作为模板")
        
    except Exception as e:
        print(f"❌ 分析失败: {e}")

if __name__ == '__main__':
    compare_old_vs_new_images()